#ifndef FHE_CORE_IFUNC_H
#define FHE_CORE_IFUNC_H

#include <fhe/core/Val.h>
#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
#include <vector>

namespace fhe
{
  namespace core
  {
    class IFunc : boost::noncopyable
    {
    public:
      typedef boost::shared_ptr< IFunc > Ptr;
      virtual Val call( const std::vector< Val >& args ) const = 0;
      virtual std::string name() const = 0;
    };
  }
}

#endif
